import { getUserInfoApi, getUserProfileApi, loginApi } from '@/api/user'
// 起个别名  // 不起别名也没有问题
import { getToken, removeToken, setToken as setTokenfn } from '@/utils/auth'

const state = {
  token: getToken() || '',
  userInfo: {}
}
const mutations = {
  // 把token存到state里
  setToken(state, newToken) {
    state.token = newToken
    // auth 里的存cookie方法
    setTokenfn(newToken)
  },
  // 存用户信息
  setUserInfo(state, newUserInfo) {
    state.userInfo = newUserInfo
  },
  logout(state) {
    state.token = ''
    removeToken()
    state.userInfo = {}
  }
}
const actions = {
  // 封装登录异步请求
  login(store, data) {
    return new Promise((reslove, reject) => {
      loginApi(data).then(res => {
      // console.log(res)
      // 定义token 调用mutations里的方法
        const token = res.data
        store.commit('setToken', token)
        // 成功返回res
        reslove(res)
      }).catch(err => {
        reject(err)
      })
    })
  },
  // 请求用户信息
  async getUserProfile({ commit }) {
    // api封装的请求用户信息
    // getUserProfileApi().then((res) => {
    //   getUserInfoApi(res.data.userId).then(() => {
    //     commit('setUserInfo', res.data)
    //   })
    // })
    // 先获取不带头像的用户信息
    const res = await getUserProfileApi()
    // 根据id获取带头像的用户信息
    const res2 = await getUserInfoApi(res.data.userId)
    // 两个数据展开放在一个对象
    const baseInfo = {
      ...res.data,
      ...res2.data
    }
    // 同步代码然后存到state
    commit('setUserInfo', baseInfo)
    // return 出去  然后在前置路由守卫里接收
    return baseInfo
  }
}
const getters = {}

export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
}

